package com.mhd.usercontroller.service;



import com.mhd.usercontroller.entity.User;
import com.mhd.usercontroller.ex.UserException;
import com.mhd.usercontroller.vo.TableVo;
import com.mhd.usercontroller.vo.UserRegistVo;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Date;

public interface UserService {

    /**
     * 根据id查用户
     * @param id
     * @return
     */
    public User getUser(Integer id);



    /**
     * 用户登录功能，判断用户名密码是否正确
     * @param username
     * @param password
     * @return 返回的user对象不为空，代表登录成功；如果user为空，代表登录失败
     */
    User login(String username, String password);

    /**
     * 注册用户
     * 1. 需要把 userRegistVo 中的用户的头像文件保存到指定目录
     * 2. 把用户信息落库
     * @param userRegistVo
     */
    void registUser(UserRegistVo userRegistVo) throws Exception;

    /**
     * 分页查询用户信息，返回 layui 数据表格组件需要的 TableVo对象
     * @param page
     * @param limit
     * @return
     */
    TableVo<User> getUserByPage(Integer page, Integer limit);

    /**
     * 管理页面新增用户
     * @param user
     */
    void addUser(User user) throws UserException, UserException;

    /**
     * 根据ids删除用户
     * @param ids
     */
    void delUserByIds(String[] ids);

    /**
     * 根据id修改用户信息，不为空的字段都改
     * @param user
     */
    void updateUserById(User user) throws UserException;

    /**
     * 分页查询用户数据 ，带有额外的查询条件
     * @param page
     * @param limit
     * @param username
     * @param sex
     * @param birthday
     * @return
     */
    TableVo<User> getAllUsersByPageHelper(Integer page, Integer limit, String username, String sex, Date birthday);

    /**
     * 全量导出用户表的数据，生成一个csv文件
     * @return
     */
    String export();

    /**
     * 根据上传的csv文件，批量导入用户数据
     * @param file
     */
    void importUsers(MultipartFile file) throws IOException;
}
